package com.rainng.coursesystem.module.task.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.rainng.coursesystem.model.entity.CodeWhiteEntity;
import com.rainng.coursesystem.module.task.dto.request.CodeWhiteListDTO;
import com.rainng.coursesystem.module.task.dto.request.TaskCarDTO;
import com.rainng.coursesystem.module.task.dto.response.CarProjectResDTO;
import com.rainng.coursesystem.module.task.dto.request.TaskConfigDTO;
import com.rainng.coursesystem.module.task.dto.response.TaskCarResDTO;
import com.rainng.coursesystem.module.task.dto.request.TaskQueryReqDTO;
import com.rainng.coursesystem.module.task.dto.response.TaskPagingResDTO;
import com.rainng.coursesystem.module.task.entity.Task;
import com.rainng.coursesystem.module.task.entity.projectEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import com.rainng.coursesystem.model.entity.CodeWhiteEntity;
import com.rainng.coursesystem.module.task.dto.response.CodeWhiteListResDTO;
import com.rainng.coursesystem.module.task.dto.request.StRuleListDTO;
import java.util.List;
import java.util.Map;

public interface TaskMapper extends BaseMapper<Task> {
    //管理员查询所有信息
    IPage<TaskPagingResDTO> paging(Page toPage, @Param("query") TaskQueryReqDTO params);
    IPage<TaskPagingResDTO> taskChangePaging(Page toPage, @Param("query") TaskQueryReqDTO params);

    //    组长查询组内信息
    IPage<TaskPagingResDTO> pagingByGroup(Page toPage, @Param("query") TaskQueryReqDTO params);

    IPage<TaskPagingResDTO> taskChangePagingByGroup(Page toPage, @Param("query") TaskQueryReqDTO params);

//    其它角色只能查询个人信息

    IPage<TaskPagingResDTO> pagingByPerson(Page toPage, @Param("query") TaskQueryReqDTO params);
    IPage<TaskPagingResDTO> taskChangePagingByPerson(Page toPage, @Param("query") TaskQueryReqDTO params);

    List<Map<String,Object>> getAllInfo();

    //所有组
    List<String> getAllGroupsName();

    //组下所有用户
    List<String> getAllUsersByGroupName(String groupName);

    //组下用户 所有公司
    List<String> getAllCompanyByGroupNameAndUserName(String groupName ,String realName);


    Integer countByTaskType(String taskType,String groupName,String realName,String companyName);






    //聚合
    List<Map<String,Object>> getInfoByGroupNameAndRealNameAndCompany(String groupName,String realName,String companyName);


    //组名 主检名 公司名
    List<Map<String,Object>> getInfoDetailByGroupNameAndRealNameAndComapanyName(String groupName,String realName,String companyName);

    Integer countInfoByGroupNameAndRealNameAndComapanyName(String groupName,String realName,String companyName);
    void saveCodeWhiteList(@Param("po") CodeWhiteEntity po);
    void saveTaskConfig(@Param("po") TaskConfigDTO po);
    void updateTaskConfig(@Param("po") TaskConfigDTO po);
    void saveTaskCar(@Param("po") TaskCarDTO po);
    TaskConfigDTO getTaskConfig(String taskCode);
    void updateCodeWhiteList(@Param("po") CodeWhiteEntity po);
    void deleteCodeWhiteList(@Param("po") CodeWhiteEntity po);
    IPage<CodeWhiteListResDTO> getCodeWhiteList(Page toPage, @Param("query") CodeWhiteListDTO params);
    List<TaskCarResDTO> getTaskCarByApplyNum(String applyNum);
    TaskCarResDTO getTaskCarDetail(String configIndex, String taskCode);
    void updateTaskCar(@Param("po") TaskCarDTO po);
    List<TaskCarResDTO> getCarList(String taskCode);
    //获取汽车car所对应需要做的项目
    List<CarProjectResDTO> getcarpro(@Param("taskCode") String taskCode,@Param("vin") String vin);
    //根据类型和编号获取项目具体信息
    projectEntity getproject(@Param("veType") String veType,@Param("prjNum") Integer prjNum);
    List<TaskCarResDTO> getCarListByVIN(String vin, String taskCode);

    IPage<StRuleListDTO> getStRuleList(Page toPage, @Param("query") StRuleListDTO params);
    void saveStRuleList(@Param("po") StRuleListDTO po);
    void deleteStRule(String id);
    void updateStRule(@Param("po") StRuleListDTO po);
}
